package com.ruoyi.system.service.impl;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.common.core.domain.PageQuery;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.system.domain.WmsInventoryStatistics;
import com.ruoyi.system.domain.WmsProducts;
import com.ruoyi.system.mapper.WmsInventoryStatisticsMapper;
import com.ruoyi.system.mapper.WmsProductsMapper;
import com.ruoyi.system.service.IWmsProductsService;
import com.ruoyi.system.utils.BarcodeGeneratorUtil;
import org.apache.commons.lang3.ObjectUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.List;

/**
 * 商品基础信息Service业务层处理
 *
 * @author ruoyi
 * @date 2025-06-10
 */
@Service
public class WmsProductsServiceImpl implements IWmsProductsService
{
    @Autowired
    private WmsProductsMapper wmsProductsMapper;

    @Autowired
    private WmsInventoryStatisticsMapper wmsInventoryStatisticsMapper;

    @Value("${ruoyi.profile}")
    private String profile;

    /**
     * 查询商品基础信息
     *
     * @param id 商品基础信息主键
     * @return 商品基础信息
     */
    @Override
    public WmsProducts selectWmsProductsById(Long id)
    {
        return wmsProductsMapper.selectWmsProductsById(id);
    }

    /**
     * 查询商品基础信息列表
     *
     * @param wmsProducts 商品基础信息
     * @return 商品基础信息
     */
    @Override
    public TableDataInfo<WmsProducts> selectWmsProductsList(WmsProducts wmsProducts, PageQuery pageQuery)
    {

        if(ObjectUtils.isNotEmpty(wmsProducts.getProductCategoryId())){
            List<Long> ids = getAllChildCategoryIds(wmsProducts.getProductCategoryId());

            wmsProducts.setIds(ids);
        }
        Page<WmsProducts> page = wmsProductsMapper.selectWmsProductsList(pageQuery.build(),wmsProducts);
        return TableDataInfo.build(page);
    }

    /**
     * 新增商品基础信息
     *
     * @param wmsProducts 商品基础信息
     * @return 结果
     */
    @Override
    public int insertWmsProducts(WmsProducts wmsProducts) throws Exception {
        //生成二维码
        String filePath = profile+"/upload/barcode_img/";
        String fileName = BarcodeGeneratorUtil.generateBarcode(filePath, wmsProducts.getBarcode());

        wmsProducts.setBarcodeImageUrl("/profile/upload/barcode_img/"+fileName);


        int i = wmsProductsMapper.insertWmsProducts(wmsProducts);

        //新增商品时，也要在库存统计中新增，库存数量默认是0
        WmsInventoryStatistics wmsInventoryStatistics = new WmsInventoryStatistics();
        wmsInventoryStatistics.setProductId(wmsProducts.getId());
        wmsInventoryStatisticsMapper.insertWmsInventoryStatistics(wmsInventoryStatistics);
        return i;
    }

    /**
     * 修改商品基础信息
     *
     * @param wmsProducts 商品基础信息
     * @return 结果
     */
    @Override
    public int updateWmsProducts(WmsProducts wmsProducts)
    {
        return wmsProductsMapper.updateWmsProducts(wmsProducts);
    }

    /**
     * 批量删除商品基础信息
     *
     * @param ids 需要删除的商品基础信息主键
     * @return 结果
     */
    @Override
    public int deleteWmsProductsByIds(Long[] ids)
    {
        return wmsProductsMapper.deleteWmsProductsByIds(ids);
    }

    /**
     * 删除商品基础信息信息
     *
     * @param id 商品基础信息主键
     * @return 结果
     */
    @Override
    public int deleteWmsProductsById(Long id)
    {
        return wmsProductsMapper.deleteWmsProductsById(id);
    }

    // 递归查找所有子分类ID
    public List<Long> getAllChildCategoryIds(Long parentId){
        List<Long> result = new ArrayList<>();
        getChildCategoryIdsRecursive(parentId, result);
        return result;
    }

    private void getChildCategoryIdsRecursive(Long parentId, List<Long> result){
        List<Long> ids = wmsProductsMapper.getWmsProductCategories(parentId);

        for (Long id : ids) {
            result.add(id);
            // 递归查询子分类
            getChildCategoryIdsRecursive(id, result);
        }
    }
}
